Technote 1106
Update: Borrowed AFP Sessions
ñ⁄éü
ÇÕÇ∂ÇflÇ…
ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄèÓïÒÉXÉeÅ[É^ÉXÉRÅ[Éã
Ç‹ÇΔÇfl |
Macintosh ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ…É}ÉEÉìÉgÇ≥ÇÍÇΩ
AFP É{ÉäÉÖÅ[ÉÄÇÃÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜÇÃéÿópï˚ñ@Çê‡ñæÇµÇ‹Ç∑ÅBÉ}ÉEÉìÉgÇ≥ÇÍÇΩ
AFP É{ÉäÉÖÅ[ÉÄÇÃÉtÉ@ÉCÉãÉVÉXÉeÉÄÇÃèÓïÒÇéÊìæÇ∑ÇÈï˚ñ@LJê‡ñæÇµÇ‹Ç∑ÅB
DZÇà TECHNOTE ÇÕÅAAFP ÉZÉbÉVÉáÉìÇÃéÿópÇ…ä÷Ç∑ÇÈà»ëOÇà TECHNOTE ÇÃâ¸î≈Ç≈ÅAAppleShare
Client 3.7 à»ç~ÇégópÇ∑ÇÈÉVÉXÉeÉÄÇ…äYìñǵNjÇ∑ÅBǪÇÍà»ëOÇÃÉoÅ[ÉWÉáÉìÇà AppleShare
Client DžǬǢǃÇÕÅwTechnote NW 16ÅxÇ…ãLç⁄Ç≥ÇÍǃǢÇÈèÓïÒDžǵÇΩǙǡǃÇ≠ÇæÇ≥Ç¢ÅB |
ÅñçXêVâ”èäÇÕëæéöÇ®ÇÊÇ—éŒëÃÇ≈é¶ÇµÇ‹Ç∑ÅB
ÇÕÇ∂ÇflÇ…
AppleShare Chooser Extension ÇÕÅAFile Manager ÉRÉ}ÉìÉhÇÅAǪÇÃÉRÉ}ÉìÉhÇΔìôâøÇ»
AFP ÉRÉ}ÉìÉhÇ…ïœä∑Ç∑ÇÈÇΩÇflÅAMacintosh ÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅAAppleTalk Filing Protocol
(AFP) ÉtÉ@ÉCÉãÉTÅ[ÉoÇ…ëŒÇµÇƒÅAÇŸÇΔÇÒÇ«Ç∑Ç◊ǃÇÃÉ{ÉäÉÖÅ[ÉÄ/ÉtÉ@ÉCÉãÉAÉNÉZÉXëÄçÏÇçsǧDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕí èÌÅAÉtÉ@ÉCÉãÉTÅ[ÉoÇ…ÉAÉNÉZÉXÇ∑ÇÈÇÃÇ…
File Manager ÇåƒÇ—èoǵNjÇ∑ÅBFile Manager ÇÕÅAAppleShare ÉGÉNÉXÉ^Å[ÉiÉãÅEÉtÉ@ÉCÉãÉVÉXÉeÉÄ
(AppleShare Chooser Extension ÇÃàÍïî) ÇåƒÇ—èoǵNjÇ∑ÅBAppleShare ÉGÉNÉXÉ^Å[ÉiÉãÅEÉtÉ@ÉCÉãÉVÉXÉeÉÄÇÕÅAFile
Manager ÉRÅ[ÉãÇ AFP ÉRÅ[ÉãÇ…ïœä∑ǵÅA.AFPTranslator ÉhÉâÉCÉoÇåƒÇ—èoǵNjÇ∑ÅB.AFPTranslator ÉhÉâÉCÉoÇÕÅAAFP
ÉRÅ[ÉãÇÉTÅ[ÉoÇ÷ëóÇËÅAǪÇÃâûìöÇ AppleShare ÉGÉNÉXÉ^Å[ÉiÉãÅEÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ…ï‘ǵNjÇ∑ÅBÉTÅ[ÉoÇ÷ÇÃê⁄ë±åoòHÇÕÅAÉRÉlÉNÉVÉáÉìÅEÉgÉâÉìÉXÉ|Å[ÉgÅEÉ^ÉCÉvÇ…ÇÊÇËÅAAppleTalk
Ç© TCP/IP ÇÃÇ¢Ç∏ÇÍǩDžǻÇËÇ‹Ç∑ÅBAppleShare ÉGÉNÉXÉ^Å[ÉiÉãÅEÉtÉ@ÉCÉãÉVÉXÉeÉÄÇÕÅAâûìöÉfÅ[É^ǙdžÇÍnjǪÇÍÇïœä∑ǵÅAFile
Manager Ç…ï‘ǵÅAFile Manager ÇÕÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ï‘ǵNjÇ∑ÅB9ê} 1 Ç…ÅAMacintosh ÉAÉvÉäÉPÅ[ÉVÉáÉìÇΔ
AFP ÉTÅ[ÉoÇÃí èÌÇÃÉRÉ}ÉìÉhÇÃó¨ÇÍÇé¶ÇµÇ‹Ç∑ÅB

ê} 1: ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ File Manager åoóRÇ≈ÉtÉ@ÉCÉãÉTÅ[ÉoÇégǧóléq
ǵǩǵǻǙÇÁÅAAFP Ç™ÉTÉ|Å[ÉgÇ∑ÇÈëÄçÏÇÃÇ§ÇøÅAFile Manager Ç…ÇÕäYìñÇ∑ÇÈLJÇÃǙǻǢèÍçáǙdžÇËÇ‹Ç∑ÅBDZÇÃÇÊǧǻèÍçáÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅA.AFPTranslator ÉhÉâÉCÉoåoóRÇ≈
AFP ÉTÅ[ÉoÇ… AFP ÉRÉ}ÉìÉhÇìnÇ≥Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
AFP ÉRÉ}ÉìÉhÇ≈ÉtÉ@ÉCÉãÉTÅ[ÉoÇ…ÉAÉNÉZÉXÇ∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ÇÕÅAÉtÉ@ÉCÉãÉTÅ[ÉoÇΔÇÃä‘Ç…
AFP ÉZÉbÉVÉáÉìÇ™ïKóvÇ≈Ç∑ÅBÉZÉbÉVÉáÉìǙǻǢèÍçáÇÕÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅA.AFPTranslatorÉhÉâÉCÉoÇégÇ¢ÅAafpLogin
(džÇÈÇ¢ÇÕ afpLoginCont ) Ç≈ÉZÉbÉVÉáÉìÇäJÇ©Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBÇΔDZÇÎÇ™ÅAAFP
É{ÉäÉÖÅ[ÉÄÇ™Ç∑Ç≈Ç…Ç–ÇΔǬÇ≈LJ Macintosh ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ…ÇÊǡǃÉ}ÉEÉìÉgÇ≥ÇÍǃǢÇÈèÍçáÅAÉtÉ@ÉCÉãÉTÅ[ÉoÇΔÇÃÉZÉbÉVÉáÉìÇÕÇ∑Ç≈Ç…äJÇ©ÇÍǃǢNjÇ∑ÅBǪÇÃÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜÇ.AFPTranslator
ÉhÉâÉCÉo (AppleShare Chooser Extension ÇÃï ÇÃïîï™) Ç©ÇÁéÊìæÇ∑ÇÍÇŒÅAǪÇÃÉZÉbÉVÉáÉìÇégǡǃÉtÉ@ÉCÉãÉTÅ[ÉoÇ…
AFP ÉRÉ}ÉìÉhÇ™ëóÇÍÇ‹Ç∑ÅBÇΩÇæÇµêßñÒǙdžÇËÇ‹Ç∑ÅBê} 2 Ç…ÅAMacintosh ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÅA.AFPTranslator
Ç©ÇÁéÿópǵÇΩÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜÇégǡǃÅA.AFPTranslator ÉhÉâÉCÉoåoóRÇ≈íºê⁄
AFP ÉtÉ@ÉCÉãÉTÅ[ÉoÇ…ÉAÉNÉZÉXÇ∑ÇÈèÍçáÇÃÉRÉ}ÉìÉhÇÃó¨ÇÍÇé¶ÇµÇ‹Ç∑ÅB

ê} 2: ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÅAéÿópǵÇΩÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜÇégÇ¢ÅA.AFPTranslator ÉhÉâÉCÉoåoóRÇ≈ÉtÉ@ÉCÉãÉTÅ[ÉoÇégǧóléq
TECHNOTE ÇÃéüÇÃêflÇ≈ÇÕÅA.AFPTranslator ÉhÉâÉCÉoÇ©ÇÁÅAÉ}ÉEÉìÉgçœÇ›ÇÃ
AFP É{ÉäÉÖÅ[ÉÄÇà AFP ÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜÇéÊìæÇ∑ÇÈï˚ñ@Çê‡ñæÇµÇ‹Ç∑ÅBéÿópǵÇΩ
AFP ÉZÉbÉVÉáÉìÇégópÇ∑ÇÈèÍçáÇ…íçà”Ç∑Ç◊Ç´êßñÒéñçÄLJóÒãìǵNjÇ∑ÅB
ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄèÓïÒÉXÉeÅ[É^ÉXÉRÅ[Éã
AppleShare ÉGÉNÉXÉ^Å[ÉiÉãÅEÉtÉ@ÉCÉãÉVÉXÉeÉÄÇÕÅAFile Manager ÉRÉ}ÉìÉhÇà AFP ÉRÉ}ÉìÉhÇ÷ÇÃïœä∑ÅAAFP
ÉtÉ@ÉCÉãÉTÅ[ÉoÇΔÇÃÉZÉbÉVÉáÉìÇÃä«óùÇçsǢNjÇ∑ÅB.AFPTranslator
ÉhÉâÉCÉoÇ÷ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄèÓïÒÉXÉeÅ[É^ÉXÉRÅ[Éã (AFPSVolInfo )
Çî≠çsÇ∑ÇÈÇΔÅAÉhÉâÉCÉoÇ™ï€ë∂Ç∑ÇÈèdóvÇ»èÓïÒÇÇ¢Ç≠ǬǩéÊìæÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBAFPSVolInfo
ÉXÉeÅ[É^ÉXÉRÅ[ÉãÇ™ï‘Ç∑èÓïÒÇÕéüÇÃÇΔÇ®ÇËÇ≈Ç∑ÅB
- ÉTÅ[ÉoÇΔÇÃÉZÉbÉVÉáÉìÇäJÇ≠ÇÃÇ…égópÇ∑ÇÈ AFP ÇÃÉoÅ[ÉWÉáÉìÅBDZÇÍÇ…ÇÊÇËÅADZÇÃÉZÉbÉVÉáÉìÇ≈égópâ¬î\Ç»
AFP ÉRÅ[ÉãÇ™ÇÌÇ©ÇËÇ‹Ç∑ÅB
- AFPÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜ - ÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜÇÕÅAAFP
ÉRÅ[ÉãÇçsǧç€Ç…ÅA
.AFPTranslator ÉhÉâÉCÉoÇ…ìnǵNjÇ∑ÅB
- AFP É{ÉäÉÖÅ[ÉÄ ID î‘çÜ - É{ÉäÉÖÅ[ÉÄ ID î‘çÜÇïKóvÇΔÇ∑ÇÈ AFP ÉRÅ[ÉãÇ…ìnÇ∑î‘çÜÇ≈Ç∑ÅB
- ÉtÉ@ÉCÉãÉTÅ[ÉoÇÃÉCÉìÉ^Å[ÉlÉbÉgÅEÉ\ÉPÉbÉgÉAÉhÉåÉX - DZÇÍÇÕÅAFile Manager ÇÃ
PBHGetVolParms
ä÷êîÇ™ GetVolParmsInfoBuffer ÉåÉRÅ[ÉhÇà vMServerAdr ÉtÉBÅ[ÉãÉhÇ…ï‘Ç∑ÉCÉìÉ^Å[ÉlÉbÉgÅEÉ\ÉPÉbÉgÉAÉhÉåÉXÇΔìØÇ∂Ç≈Ç∑ÅB
- ÉZÉbÉVÉáÉìämóßÇÃÇΩÇflÇ…égópÇ∑ÇÈÉÜÅ[ÉUîFèÿï˚éÆ (UAM) - File Manager ÇÃ
PBHGetLogInInfo
ä÷êîÇ™ ioObjType Ç…ï‘Ç∑ÉèÅ[ÉhílÅAÇ®ÇÊÇ— File Manager Çà PBGetVolMountInfo
ä÷êîÇ™ AFPVolMountInfo ÉåÉRÅ[ÉhÇà uamType ÉtÉBÅ[ÉãÉhÇ…ï‘Ç∑ÉèÅ[ÉhílÇΔìØÇ∂Ç≈Ç∑ÅB
- ÉZÉbÉVÉáÉìämóßÇ≈égópÇ∑ÇÈÉÜÅ[ÉUñº - DZÇÍÇÕÅAFile Manager ÇÃ
PBHGetLogInInfo
ä÷êîÇ™ ioObjNamePtr ÇÃéwÇ∑ï∂éöóÒóÃàÊÇ…ï‘Ç∑ï∂éöóÒÅAÇ®ÇÊÇ— FileManager
Çà PBGetVolMountInfo ä÷êîÇ™ AFPVolMountInfo ÉåÉRÅ[ÉhÇÃ
AFPData ÉtÉBÅ[ÉãÉhì‡Ç…ï‘Ç∑ï∂éöóÒ (AFPVolMountInfo ÉåÉRÅ[ÉhÇÃ
AFPData ÉtÉBÅ[ÉãÉhì‡ÇÃÉÜÅ[ÉUñºÇÃäiî[à íuÇÕ userNameOffset
ÉtÉBÅ[ÉãÉhÇ≈åàÇ‹ÇËÇ‹Ç∑) ÇΔìØÇ∂Ç≈Ç∑ÅB
- ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄÇÃÉAÉCÉRÉìÇΔÉ}ÉXÉN - ÉfÉBÉXÉNÉhÉâÉCÉoÇ÷ÇÃ
csCode = 21
ÇÃêßå‰ÉRÅ[ÉãÇ™ï‘Ç∑ 256 ÉoÉCÉgÇÃÉAÉCÉRÉìÇΔÉ}ÉXÉNÇΔìØÇ∂Ç≈Ç∑ÅB
- Finder ÇÃÅgèÓïÒÇå©ÇÈÅhÉ_ÉCÉAÉçÉOÇ… (ÅgèÍèä:ÅhÇ…ë±ÇØÇƒ) ï\é¶Ç≥ÇÍÇÈï∂éöóÒÅBÉfÉBÉXÉNÉhÉâÉCÉoÇ÷ÇÃ
csCode = 21 ÇÃêßå‰ÉRÅ[ÉãÇ™ï‘Ç∑ï∂éöóÒÇΔìØÇ∂Ç≈Ç∑ÅB
è„ãLÇÃèÓïÒåQÇÕÅAGetVolSessInfoRec ÉåÉRÅ[ÉhÇ…ï‘Ç≥ÇÍÇ‹Ç∑ÅBGetVolSessInfoRec
ÉåÉRÅ[ÉhÇÕéüÇÃÇÊǧDžíËã`Ç≥ÇÍǃǢNjÇ∑ÅB
GetVolSessInfoRec = RECORD
sessAFPVersion: Integer; {AFP ÉoÅ[ÉWÉáÉìî‘çÜ: }
{ 1 = ÉoÅ[ÉWÉáÉì 1.1 }
{ 2 = ÉoÅ[ÉWÉáÉì 2.0 }
{ 3 = ÉoÅ[ÉWÉáÉì 2.1 }
{ 4 = ÉoÅ[ÉWÉáÉì 2.2 }
sessReferenceNumber: Integer; {AFP ÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜ}
sessAFPVolID: Integer; {AFP É{ÉäÉÖÅ[ÉÄ ID}
sessServerAddress: OTAddressPtr; {ÉTÅ[ÉoÉCÉìÉ^Å[ÉlÉbÉgÉAÉhÉåÉX}
sessUAMType: Integer; {ÉÜÅ[ÉUîFèÿï˚éÆ: }
{ 1 = ÉÜÅ[ÉUîFèÿǻǵ }
{ 2 = ÉNÉäÉAÉeÉLÉXÉgÉpÉXÉèÅ[Éh }
{ 3 = óêêîåä∑ }
{ 6 = ëoï˚å¸óêêîåä∑ }
sessUserNamePtr: StringPtr; {ÉÜÅ[ÉUñºï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^}
sessVolIconPtr: Ptr; {ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄÇÃÉAÉCÉRÉì/É}ÉXÉNÇ÷ÇÃÉ|ÉCÉìÉ^}
sessWhereStringPtr: StringPtr; {à íuèÓïÒ ([èÍèä:]) ï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^}
END;
åxçê:
sessUserNamePtr ÅAsessVolIconPtr ÅAsessServerAddress ÅAsessWhereStringPtr
ÇÕÅA.AFPTranslator ÉhÉâÉCÉoÇ™ï€éùÇ∑ÇÈÉfÅ[É^ÇéwǵNjÇ∑ÅBégópÇ∑ÇÈëOÇ…ÉvÉçÉOÉâÉÄë§ÇÃïœêîÇ…ÉfÅ[É^ÇÉRÉsÅ[ÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB |
.AFPTranslator ÉhÉâÉCÉoÇà AFPSVolInfo ÉXÉeÅ[É^ÉXÉRÅ[ÉãÇ™égópÇ∑ÇÈ
ParamBlockRec ÉåÉRÅ[ÉhÇÃÉtÉBÅ[ÉãÉhÇÕéüÇÃÇÊǧDžíËã`Ç≥ÇÍǃǢNjÇ∑ÅB
-> 12 ioCompletion (long) äÆóπÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^
<- 16 ioResult (word) åãâ ÉRÅ[Éh
-> 24 ioRefNum (word) AFPTranslator ÉäÉtÉ@ÉåÉìÉXî‘çÜ
-> 26 csCode (word) ǬÇÀÇ… AFPSVolInfo
-> 28 ioMisc (long) É{ÉäÉÖÅ[ÉÄÇà VCB Ç÷ÇÃÉ|ÉCÉìÉ^
-> 32 ioBuffer (long) GetVolSessInfoRec Ç÷ÇÃÉ|ÉCÉìÉ^
-> 36 ioReqCount (long) óvãÅÇ∑ÇÈÉfÅ[É^ÇÃÉTÉCÉY
<- 40 ioActCount (long) ï‘Ç≥ÇÍÇΩÉfÅ[É^ÇÃÉTÉCÉY
DZDZǩÇÁÉpÉâÉÅÅ[É^ÉuÉçÉbÉNÉtÉBÅ[ÉãÉhÇ…ä÷ǵǃè⁄ǵÇ≠ê‡ñæÇµÇ‹Ç∑ÅB
ioCompletion (Longword ÇÃì¸óÕÉ|ÉCÉìÉ^) AFPSVolInfo
ÉXÉeÅ[É^ÉXÉRÅ[ÉãÇ™îÒìØä˙Ç≈åƒÇŒÇÍÇΩèÍçáÇÕÅAäÆóπÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^Ç© NIL
Ç≈Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
ioResult (Word ÇÃåãâ ÉRÅ[Éh) ä÷êîÇÃñflÇËíl
ioRefNum (Word ÇÃì¸óÕíl) .AFPTranslator ÉhÉâÉCÉoÇÃÉhÉâÉCÉoÉäÉtÉ@ÉåÉìÉXî‘çÜ
csCode (Word ÇÃì¸óÕíl) èÌÇ… AFPSVolInfo (124)
ioMisc (Longword ÇÃì¸óÕÉ|ÉCÉìÉ^) É{ÉäÉÖÅ[ÉÄÇÃêßå‰ÉuÉçÉbÉN
(VCB) Ç÷ÇÃÉ|ÉCÉìÉ^
- ioBuffer (Longword ÇÃì¸óÕÉ|ÉCÉìÉ^) ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄèÓïÒÇ™ï‘Ç≥ÇÍÇÈ GetVolSessInfoRec
Ç÷ÇÃÉ|ÉCÉìÉ^
ioReqCount (Longword ÇÃì¸óÕíl) ioBuffer
Ç™éwÇ∑ GetVolSessInfoRec ÇÃÉTÉCÉY
ioActCount (Longword ÇÃåãâ íl) ioBuffer
Ç™éwÇ∑ GetVolSessInfoRec Ç…ï‘Ç≥ÇÍÇΩÉfÅ[É^ÇÃÉTÉCÉY
AFPSVolInfo ÉXÉeÅ[É^ÉXÉRÅ[ÉãÇÕéüÇÃåãâ ÉRÅ[ÉhÇï‘ǵNjÇ∑ÅB
noErr (0) ÉGÉâÅ[ǻǵÅB
badUnitErr (-21) ÉhÉâÉCÉoÉäÉtÉ@ÉåÉìÉXî‘çÜÇ™ê≥ǵÇ≠ǻǢÅB
unitEmptyErr (-22) ÉhÉâÉCÉoÉäÉtÉ@ÉåÉìÉXî‘çÜÇ™ê≥ǵÇ≠ǻǢÅB
notOpenErr (-28) ÉhÉâÉCÉoÇ™Ç‹ÇæäJÇ©ÇÍǃǢǻǢÅB
statusErr (-18) ÉhÉâÉCÉoÇÕDZÇÃÉXÉeÅ[É^ÉXÉRÅ[ÉãÇ…âûìöÇ≈ǴǻǢÅB
paramErr (-50) ioReqCount Ç™ GetVolSessInfoRec
ÉåÉRÅ[ÉhÇ™è¨Ç≥Ç∑ǨÇÈDZÇΔÇé¶ÇµÇƒÇ¢ÇÈÇ©ÅAioMisc Ç≈éwíËÇ≥ÇÍÇΩÉ{ÉäÉÖÅ[ÉÄÇ™.AFPTranslator
ÉhÉâÉCÉoÇÃèäóLÇ≈ÇÕǻǢÅB
éüÇÃÉRÅ[ÉhÇÕÅAAFPSVolInfo ÉXÉeÅ[É^ÉXÉRÅ[ÉãÇégǡǃÅAÉ{ÉäÉÖÅ[ÉÄÉäÉtÉ@ÉåÉìÉXî‘çÜÇ≈éwíËÇ≥ÇÍÇΩÉ{ÉäÉÖÅ[ÉÄÇÃÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄèÓïÒÇéÊìæÇ∑ÇÈï˚ñ@Çé¶ÇµÇ‹Ç∑ÅB
USES
AppleTalk, Files;
CONST
{ AFP ÉoÅ[ÉWÉáÉìî‘çÜ }
AFPVer1_1 = 1; { AFP ÉoÅ[ÉWÉáÉì 1.1 }
AFPVer2_0 = 2; { AFP ÉoÅ[ÉWÉáÉì 2.0 }
AFPVer2_1 = 3; { AFP ÉoÅ[ÉWÉáÉì 2.1 }
AFPVer2_2 = 4; { AFP ÉoÅ[ÉWÉáÉì 2.2 }
AFPSVolInfo = 124; { ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄèÓïÒÉRÅ[Éã }
TYPE
GetVolSessInfoRec = RECORD
sessAFPVersion: Integer; {AFP ÉoÅ[ÉWÉáÉìî‘çÜ}
sessReferenceNumber: Integer; {AFP ÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜ}
sessAFPVolID: Integer; {AFP É{ÉäÉÖÅ[ÉÄ ID}
sessServerAddress: OTAddressPtr; {ÉTÅ[ÉoÉCÉìÉ^Å[ÉlÉbÉgÉAÉhÉåÉX}
sessUAMType: Integer; {ÉÜÅ[ÉUîFèÿï˚éÆ}
sessUserNamePtr: StringPtr; {ÉÜÅ[ÉUñºï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^}
sessVolIconPtr: Ptr; {ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄÇÃÉAÉCÉRÉì/É}ÉXÉNÇ÷ÇÃÉ|ÉCÉìÉ^}
sessWhereStringPtr: StringPtr; {à íuèÓïÒ ([èÍèä:]) ï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^}
END;
FUNCTION GetVolSessionInfo (theVRefNum: Integer;
VAR theVolSessInfoRec: GetVolSessInfoRec): OSErr;
CONST
TSigWord = $4244; { HFS É{ÉäÉÖÅ[ÉÄÉVÉOÉlÉ`ÉÉ }
VAR
pb: ParamBlockRec;
vcbPtr: QElemPtr;
afpTranslatorRefNum: Integer;
err: OSErr;
BEGIN
{ .AFPTranslator ÉhÉâÉCÉoÇà refNum ÇéÊìæ }
err := OpenDriver('.AFPTranslator', afpTranslatorRefNum);
IF err noErr THEN
BEGIN { ÉhÉâÉCÉoÇ™ÉIÅ[ÉvÉìÇ≈ǴǻǢ }
GetVolSessionInfo := err;
Exit(GetVolSessionInfo);
END;
{ É{ÉäÉÖÅ[ÉÄÉäÉtÉ@ÉåÉìÉXî‘çÜÇ≈ VCB Çî≠å© }
QHdrPtr(vcbPtr) := GetVCBQHdr; { VCB ÉLÉÖÅ[ÉwÉbÉ_Ç÷ÇÃÉ|ÉCÉìÉ^ }
vcbPtr := QHdrPtr(vcbPtr)^.qHead; { ç≈èâÇà VCB Ç÷ÇÃÉ|ÉCÉìÉ^ }
WHILE (vcbPtr NIL) DO
BEGIN
IF VCB(vcbPtr^).vcbSigWord = TSigWord THEN { HFS É{ÉäÉÖÅ[ÉÄ Ç≈Ç»ÇØÇÍnjǻÇÁǻǢ }
IF VCB(vcbPtr^).vcbVRefNum = theVRefNum THEN
Leave; { VCB Ç™å©Ç¬Ç©Ç¡ÇΩ }
vcbPtr := vcbPtr^.vcbQElem.qLink; { éüÇà VCB }
END;
IF (vcbPtr = NIL) THEN
BEGIN { É{ÉäÉÖÅ[ÉÄÇ™å©Ç¬Ç©ÇÁǻǢ }
GetVolSessionInfo := nsvErr;
Exit(GetVolSessionInfo);
END;
{ É{ÉäÉÖÅ[ÉÄÉZÉbÉVÉáÉìèÓïÒÇéÊìæÇ∑ÇÈÉXÉeÅ[É^ÉXÉRÅ[Éã }
WITH pb DO
BEGIN
ioRefNum := afpTranslatorRefNum;
csCode := AFPSVolInfo;
ioMisc := Ptr(vcbPtr);
ioBuffer := @theVolSessInfoRec;
ioReqCount := LongInt(sizeof(GetVolSessInfoRec));
END;
GetVolSessionInfo := PBStatus(@pb, FALSE);
END;
FUNCTION DoGetVolSessionInfo (vRefNum: Integer): OSErr;
VAR
err: OSErr;
myVolSessInfoRec: GetVolSessInfoRec;
myIconHandle: Handle;
myUserName: Str31;
myWhereString: Str255;
BEGIN
err := GetVolSessionInfo(vRefNum, myVolSessInfoRec);
IF err = noErr THEN
BEGIN
WITH myVolSessInfoRec DO
BEGIN
{ ï∂éöóÒïœêîÇ…ÉÜÅ[ÉUñºÇÉRÉsÅ[ }
myUserName := sessUserNamePtr^;
{ ÉnÉìÉhÉãÇäÑÇËìñǃÅAǪDZDžÉAÉCÉRÉìÇà⁄Ç∑ }
myIconHandle := NewHandle(kLargeIconSize);
IF myIconHandle = NIL THEN
BEGIN
DoGetVolSessionInfo := MemError;
Exit(DoGetVolSessionInfo);
END;
BlockMove(sessVolIconPtr, myIconHandle^, kLargeIconSize);
{ à íuèÓïÒ ([èÍèä:]) ï∂éöóÒÇï∂éöóÒïœêîÇ…ÉRÉsÅ[ }
myWhereString := sessWhereStringPtr^;
{ DZÇÃéûì_Ç≈ÅAmyGetVolSessInfoRec Ç©ÇÁÉRÉsÅ[ǵÇΩÇ©ÅA}
{ Ç‹Çæ myGetVolSessInfoRec Ç…écǡǃǢÇÈèÓïÒÇÕÇ∑Ç◊ǃóòópâ¬î\ }
DisposHandle(myIconHandle);
END;
END;
DoGetVolSessionInfo := err;
END;
ÉZÉbÉVÉáÉìéÿópÇÃÉãÅ[ÉãÇΔêßñÒDžǬǢǃÇÃíçà”: Macintosh ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ©ÇÁ AFP
ÉZÉbÉVÉáÉìÇéÿópÇ∑ÇÈÉvÉçÉOÉâÉÄÇÕÅADZÇà TECHNOTE Ç…ãLç⁄Ç≥ÇÍǃǢÇÈêßñÒÇéÁÇÁÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
ÉAÉbÉvÉãǙDZÇÍÇ‹Ç≈ AFPSVolInfo ÇÉhÉLÉÖÉÅÉìÉgǵǃǢǻǩǡÇΩÇÃÇ…ÇÕê≥ìñÇ»óùóRǙdžÇËÇ‹Ç∑ÅBAFP
ÉtÉ@ÉCÉãÉTÅ[ÉoÇÕÉZÉbÉVÉáÉìÇ≈ÉÜÅ[ÉUÇãÊï ǵǃǮÇËÅAAppleShare ÉGÉNÉXÉ^Å[ÉiÉãÅEÉtÉ@ÉCÉãÉVÉXÉeÉÄÇÕÅAÉIÅ[ÉvÉìíÜÇÃ
AFP É{ÉäÉÖÅ[ÉÄ (Ç®ÇÊǗǪÇÃì‡óe) DžǬǢǃàÍíËÇÃâºíËÇ…äÓÇ√ǢǃèàóùÇêiÇflÇ‹Ç∑ÅBMacintosh
ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ™èäóLÇ∑ÇÈÉZÉbÉVÉáÉìÇïsê≥Ç…égópÇ∑ÇÈÇΔÅAAppleShare ÉGÉNÉXÉ^Å[ÉiÉãÅEÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ‚ÉtÉ@ÉCÉãÉTÅ[ÉoÇç¨óêÇ≥ÇπǃǵNjǧâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅBÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ™èäóLǵǃǢÇÈ
AFP ÉZÉbÉVÉáÉìÇéÿópÇ∑ÇÈèÍçáÇ…äÓñ{ìIÇ…éÁÇÈÇ◊ǴDZÇΔÇÕéüÇÃÇΔÇ®ÇËÇ≈Ç∑ÅB
File Manager ä÷êîÇ≈Ç≈Ç´ÇÈDZÇΔÇÕÅAFile Manager ä÷êîÇégǡǃçsǡǃÇ≠ÇæÇ≥Ç¢ÅBAFP
ÉRÅ[ÉãÇÕê‚ëŒégÇÌǻǢÇ≈Ç≠ÇæÇ≥Ç¢ÅB
DZÇÍÇ…äYìñÇ∑ÇÈÇÃÇÕÅAÉ{ÉäÉÖÅ[ÉÄÅAÉfÉBÉåÉNÉgÉäÅAÉtÉ@ÉCÉãÅAÉ{ÉäÉÖÅ[ÉÄÇÃÉfÉXÉNÉgÉbÉvÅEÉfÅ[É^ÉxÅ[ÉXÇÃÉIÅ[ÉvÉì/ÉNÉçÅ[ÉYÉRÅ[ÉãÅAÉtÉ@ÉCÉãÇ‚ÉfÉXÉNÉgÉbÉvÅEÉfÅ[É^ÉxÅ[ÉXÇäJǢǃǩÇÁÇ≈ǻǢÇΔégópÇ≈ǴǻǢÉRÅ[ÉãǻǫÇ≈Ç∑ÅBAFP
ÉZÉbÉVÉáÉìÇï¬Ç∂ÇÈÇÃÇÕLJǡǃÇÃÇŸÇ©Ç≈Ç∑ÅBDZÇÍÇÁÇà AFP ëÄçÏÇçsǧèÍçáÇÕÅAÇ‹Ç∏ÅA.AFPTranslator ÉhÉâÉCÉoÇégǡǃÉtÉ@ÉCÉãÉTÅ[ÉoÇΔÇÃä‘Ç…êÍópÇÃ
AFP ÉZÉbÉVÉáÉìÇäJǢǃÇ≠ÇæÇ≥Ç¢ÅB
ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ©ÇÁéÿópǵÇΩÉZÉbÉVÉáÉìÇégǡǃLJà¿ëSÇ» AFP ÉRÅ[ÉãÇÃàÍóóÇà»â∫Ç…é¶ÇµÇ‹Ç∑ÅBå¬ÅXÇÃ
AFP ÉRÅ[ÉãÇ≤ÇΔÇ…ÅAFile Manager ä÷êîÇ≈ÇÕÇ≈ǴǻǢDZÇΔÇ≈ÅAAFP ÉRÅ[ÉãÇ≈Ç≈Ç´ÇÈDZÇΔÇê‡ñæÇµÇ‹Ç∑ÅB
afpGetSParms - ÉTÅ[ÉoÇÃéûçèÇ‚ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄÇÃàÍóóÇéÊìæÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBÉ{ÉäÉÖÅ[ÉÄÇ≤ÇΔÇ…ÅAÉpÉXÉèÅ[ÉhÇ≈ï€åÏÇ≥ÇÍǃǢÇÈÇ©ÅAApple
II ê›íËèÓïÒÇä‹ÇfiǩǫǧǩÇí≤Ç◊ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅB
afpSetVolParms - É{ÉäÉÖÅ[ÉÄÇÃÉoÉbÉNÉAÉbÉvì˙ïtÇê›íËÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
afpChangePassword - ÉÜÅ[ÉUÇÃÉpÉXÉèÅ[ÉhÇïœçXÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
afpGetUserInfo - éwíËÇ≥ÇÍÇΩÉÜÅ[ÉUÇÃÉÜÅ[ÉU ID Ç‚ÉvÉâÉCÉ}ÉäÉOÉãÅ[Év
ID ÇéÊìæÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
afpGetSrvrMsg - åªç›ÅAç≈èâÇ…ï\é¶Ç≥ÇÍÇÈÉÅÉbÉZÅ[ÉWÇ‚ÉTÅ[ÉoÇÃÉÅÉbÉZÅ[ÉWÇéÊìæÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBDZÇÃÉRÅ[ÉãÇÕ
AFP 2.1 ÉTÅ[ÉoÇ≈ÇÃÇ›ÉTÉ|Å[ÉgÇ≥ÇÍÇ‹Ç∑ÅBíçà”: ÉTÅ[ÉoÉÅÉbÉZÅ[ÉWÇÕÉÜÅ[ÉUÇ…ÇÕäYìñǵNjÇπÇÒÅB
afpMiscUserCommand - ÉfÉxÉçÉbÉpópÇ…ó\ñÒÇ≥ÇÍǃǢNjÇ∑ÅBÅwTechnote
323 Arbitrating Use of afpMiscUserCommand and afpMiscUserWriteÅxÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
afpMiscUserWrite - ÉfÉxÉçÉbÉpópÇ…ó\ñÒÇ≥ÇÍǃǢNjÇ∑ÅBÅwTechnote
323 Arbitrating Use of afpMiscUserCommand and afpMiscUserWriteÅxÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
àÍóóÇÕÇ‹Çæë±Ç´Ç‹Ç∑Ç™ÅAà»â∫ÇÃÉRÅ[ÉãÇÕÅAFile Manager ä÷êîÇ≈ÇÕÉAÉNÉZÉXÇ≈ǴǻǢèÓïÒ
(ProDOS èÓïÒǻǫ) ÇéÊìæÇµÇΩÇËÅAê›íËÇµÇ»ÇØÇÍnjǻÇÁǻǢèÍçáÇÃÇ›égópǵǃÇ≠ÇæÇ≥Ç¢ÅB
afpEnumerate - ProDOS èÓïÒÇ‚ì¡íËÇÃÉtÉ@ÉCÉãÇ‚ÉfÉBÉåÉNÉgÉäÇÃëÆê´èÓïÒÇ™ïKóvÇ»èÍçáÇ…ÅAÉfÉBÉåÉNÉgÉäÇÃì‡óeÇéQèΔÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBDZÇÃëºÇÃñ⁄ìIÇ…ÇÕÅAFile
Manager Çà PBGetCatInfo ä÷êîÇégópÇ∑Ç◊Ç´Ç≈Ç∑ÅB
afpGetVolParms - ì¡íËÇÃÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄÇÃÉpÉâÉÅÅ[É^ÇéÊìæÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBí èÌÇÃèÍçáÇ…ÇÕÅAFile
Manager Çà PBHGetVInfo ä÷êîÇégópÇ∑Ç◊Ç´Ç≈Ç∑ÅB
afpSetDirParms - ProDOS èÓïÒÇ‚ì¡íËÇÃÉfÉBÉåÉNÉgÉäÇÃëÆê´èÓïÒÇê›íËǵÇΩÇ¢èÍçáÇ…ÅAéwíËÇÃÉfÉBÉåÉNÉgÉäÇÃÉpÉâÉÅÅ[É^Çê›íËÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBëºÇÃÇ∑Ç◊ǃÇÃópìrÇ…ÇÕÅAFile
Manager Çà PBSetCatInfo ä÷êîÇégópÇ∑Ç◊Ç´Ç≈Ç∑ÅB
afpSetFileParms - ProDOS èÓïÒÇ‚ì¡íËÇÃÉtÉ@ÉCÉãÇÃëÆê´èÓïÒÇê›íËǵÇΩÇ¢èÍçáÇ…ÅAéwíËÇÃÉtÉ@ÉCÉãÇÃÉpÉâÉÅÅ[É^Çê›íËÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBëºÇÃÇ∑Ç◊ǃÇÃópìrÇ…ÇÕÅAFile
Manager Çà PBSetCatInfo ä÷êîÇégópÇ∑Ç◊Ç´Ç≈Ç∑ÅB
afpGetFlDrParms - ProDOS èÓïÒÇ‚ì¡íËÇÃÉtÉ@ÉCÉãÇ‚ÉfÉBÉåÉNÉgÉäÇÃëÆê´èÓïÒÇ™ïKóvÇ»èÍçáÇ…ÅAéwíËÇÃÉfÉBÉåÉNÉgÉäÇ‚ÉtÉ@ÉCÉãÇÃÉpÉâÉÅÅ[É^ÇéÊìæÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBDZÇÍà»äOÇÃópìrÇ…ÇÕÅAFile
Manager Çà PBGetCatInfo ä÷êîÇégópÇ∑Ç◊Ç´Ç≈Ç∑ÅB
afpSetFlDrParms - ProDOS èÓïÒÇ‚ì¡íËÇÃÉtÉ@ÉCÉãÇ‚ÉfÉBÉåÉNÉgÉäÇÃëÆê´èÓïÒÇê›íËǵÇΩÇ¢èÍçáÇ…ÅAéwíËÇÃÉfÉBÉåÉNÉgÉäÇ‚ÉtÉ@ÉCÉãÇÃÉpÉâÉÅÅ[É^Çê›íËÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBDZÇÍà»äOÇÃópìrÇ…ÇÕÅAFile
Manager Çà PBGetCatInfo ä÷êîÇégópÇ∑Ç◊Ç´Ç≈Ç∑ÅB
AppleShare 3.0 (Ç‹ÇΩÇÕǪÇÍà»ç~) Çà Chooser Extension Ç System 6 Ç≈égópÇ∑ÇÈèÍçáÅAAFP
2.1 ÉtÉ@ÉCÉãÉTÅ[ÉoÇ…ëŒÇµÇƒÅAéüÇà AFP 2.1 ÉRÅ[ÉãÇçsǧDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBDZÇÍÇÁÇÃÉRÅ[ÉãÇÕ
System 6 Çà File Manager Ç≈ÇÕÉTÉ|Å[ÉgÇ≥ÇÍÇ‹ÇπÇÒÅB
afpGetSrvrMsg - è„ãLÇÃàÍóóÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
afpCreateID - éwíËÇÃÉtÉ@ÉCÉãÇ…ëŒÇµÇƒÉÜÉjÅ[ÉNÇ» fileID ÇçÏê¨Ç∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB
afpDeleteID - éwíËÇà fileID ÇÃÉCÉìÉXÉ^ÉìÉXÇÇ∑Ç◊ǃñ≥å¯Ç…Ç∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB
afpResolveID - éwíËÇà fileID ÇÃèÓïÒ (ÉtÉ@ÉCÉãÇÃà íuǻǫ)
ÇéÊìæÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB
afpExchangeFiles - ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄè„Çà 2 ǬÇÃÉtÉ@ÉCÉãÇÃì‡óeÇåä∑Ç∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB
- afpCatSearch - éwíËÇÃèåèÇΔàÍívÇ∑ÇÈÉtÉ@ÉCÉãÇ‚ÉtÉHÉãÉ_ÇãÅÇflǃÉ{ÉäÉÖÅ[ÉÄÇåüçıÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB
Ç‹ÇΔÇfl
Macintosh ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ≈ÇÕÉTÉ|Å[ÉgÇ≥ÇÍǃǢǻǢï˚ñ@Ç≈ AFP ÉtÉ@ÉCÉãÉTÅ[ÉoÇ…ÉAÉNÉZÉXÇ∑ÇÈïKóvÇÃdžÇÈÉfÉxÉçÉbÉpÇÕÅA.AFPTranslator
ÉhÉâÉCÉoÇ÷Çà AFPSVolInfo ÉXÉeÅ[É^ÉXÉRÅ[ÉãÇégǡǃóLâvÇ»èÓïÒÇéÊìæÇµÇƒÇ≠ÇæÇ≥Ç¢ÅBǵǩǵǻǙÇÁÅADZÇÃ
TECHNOTE Ç…ãLç⁄Ç≥ÇÍÇΩêßñÒÇéÁÇËÅAÉNÉâÉCÉAÉìÉgÇà Macintosh Ç‚ AFP ÉtÉ@ÉCÉãÉTÅ[ÉoÇ…ñ‚ëËÇãNDZÇ≥ǻǢÇÊÇ§Ç…ÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
éQçlï∂å£
- ÅwInside MacintoshÅxVolume VÅuThe AppleTalk ManagerÅv
- ÅwM.NW.afpMiscUserCommandÅx
- ÅwInside AppleTalkÅxëÊ 2 î≈ÅuAppleTalk Filing ProtocolÅv
- ÅwAppleShare 3.0 Developer's Kit, AppleTalkÅxÇÃÅuFiling Protocol Version 2.1Åv
|
çXêVì˙: 1997 îN 9 åé 30 ì˙
|